home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / spatial / deco.c next >
C/C++ Source or Header  |  1995-05-03  |  2KB  |  99 lines

  1. /* (C) Copyright 1991 Andrew Plotkin. Permission is
  2.  given to copy and use, as long as this copyright
  3.  notice is retained. */
  4.  
  5. #include <stdio.h>
  6. #include <sys/time.h>
  7. #include <X11/Xlib.h>
  8. #include <X11/keysym.h>
  9. #include "spatial.h"
  10.  
  11. extern GC gcblack, gcwhite, gcinv, gccopy, gcline, gcfield, gccubes[]; 
  12.  
  13. extern void pause_redraw(), add_cubie();
  14.  
  15. void pauseloop()
  16. {
  17.     short status, res, lev;
  18.     short droptimer, stattick;
  19.     Bool eventp;
  20.     XEvent event, nextevent;
  21.     long evmasks;
  22.     char key;
  23.     KeySym ksym;
  24.     struct timeval timeout;
  25.  
  26.     setup_fieldpm();
  27.     pause_redraw();
  28.     lev = 0;
  29.     droptimer=0;
  30.  
  31.     while (1) {
  32.     evmasks = (KeyPressMask | ExposureMask | StructureNotifyMask);
  33.     eventp = XCheckWindowEvent(dpy, win, evmasks, &event);
  34.     if (eventp) switch (event.type) {
  35.         case Expose:
  36.         eventp = XCheckWindowEvent(dpy, win, evmasks, &nextevent);
  37.         while (eventp && nextevent.type == Expose) {
  38.             eventp = XCheckWindowEvent(dpy, win, evmasks, &nextevent);
  39.         };
  40.         if (eventp) {
  41.             XPutBackEvent(dpy, &nextevent);
  42.         };
  43.         pause_redraw();
  44.         break;
  45.         case KeyPress:
  46.         XLookupString(&event, &key, 1, &ksym, NULL);
  47.         /*printf("got '%s'\n", XKeysymToString(ksym));*/
  48.         switch (ksym) {
  49.             case XK_Escape:
  50.             case XK_Q:
  51.             case XK_q:
  52.             case XK_S:
  53.             case XK_s:
  54.             return;
  55.             break;
  56.         }
  57.         break;
  58.         case ConfigureNotify:
  59.         if (event.xconfigure.width != dispx || event.xconfigure.height != dispy) {
  60.             dispx = event.xconfigure.width;
  61.             dispy = event.xconfigure.height;
  62.             XFreePixmap(dpy, backpm);
  63.             XFreePixmap(dpy, fieldpm);
  64.             backpm = XCreatePixmap(dpy, win, dispx, dispy,
  65.                        scndepth);   
  66.             fieldpm = XCreatePixmap(dpy, win, dispx, dispy,
  67.                         scndepth);   
  68.             redo_board_globals();
  69.             setup_cubies();
  70.             setup_fieldpm();
  71.             pause_redraw();
  72.         }
  73.         break;
  74.     };
  75.     timeout.tv_sec = 0;
  76.     timeout.tv_usec = 50000;
  77.     select(0, 0, 0, 0, &timeout);    
  78.     droptimer++;
  79.     if (droptimer>=5) {
  80.         droptimer=0;
  81.         if (lev==fieldz) {
  82.         lev=0;
  83.         setup_fieldpm();
  84.         pause_redraw();
  85.         }
  86.         else {
  87.         add_cubie(random()%fieldx, random()%fieldy, lev);
  88.         pause_redraw();
  89.         lev++;
  90.         }
  91.     }
  92.     }
  93. }
  94.  
  95. void pause_redraw()
  96. {
  97.     XCopyArea(dpy, fieldpm, win, gccopy, 0, 0, dispx, dispy, 0, 0);
  98. }
  99.